<template>
  <div class="login_container">
    <div class="login_box">

    <!-- 登陆表单区域 -->
    <el-form ref="loginFormRef" :model="loginFrom" :rules="LoginfromRules"   label-width="0px" class="login_form">
      
        <!-- 用戶名 -->
      <el-form-item prop="username">
         <el-input  v-model="loginFrom.username" prefix-icon="el-icon-user">
         </el-input>
      </el-form-item>

      <!-- 密碼 -->
        <el-form-item prop="password">
         <el-input type="password" v-model="loginFrom.password"  prefix-icon="el-icon-goods">
         </el-input>
      </el-form-item>

      <!-- 按鈕 -->
        <el-form-item class="btns">
         <el-button type="primary" @click="login">登录</el-button>
         <el-button type="info" @click="resetLoginForm">重置</el-button>
      </el-form-item>
      
    </el-form>

    </div>
</div>
</template>

<script>
export default {
  name: 'login',
  data() {
    return {
      // 登录表单的数据绑定对象
      loginFrom:{
                username:'admin',
                password:'123456'
            },
             LoginfromRules:{
                   // 验证用户名是否合法
        username: [
          { required: true, message: '请输入登录名称', trigger: 'blur' },
          { min: 3, max: 10, message: '长度在 3 到 10 个字符', trigger: 'blur' }
        ],
        // 验证密码是否合法
        password: [
          { required: true, message: '请输入登录密码', trigger: 'blur' },
          { min: 6, max: 15, message: '长度在 6 到 15 个字符', trigger: 'blur' }
        ]

    }
    }
  },

  methods: {
    // 登录
    login(){
      // 登录预验证  valid为验证结果 布尔值
      // 返回方法的结果是 Promise 所以 用 async await简化操作 
      // await 只能用在 async修饰的方法中

      this.$refs.loginFormRef.validate(async valid=>{
                if(!true) {return;}
                const {data:res}= await this.$http.post("login",this.loginFrom);
                if(res.meta.status !==200) return this.$message.error('登录失败')
                // console.log(res.data);
                this.$message.success('登录成功')

      // 1.将登录成功后的 token,保存到客户端的 sesionStorage 中
      // 1.1 项目中除了登录之外的其他 API 接口在登录才能访问
      // 1.2 token 只应在当前的网站打开期间生效， 所以在登录之后才能访问
      // 2.通过编程式导航跳转到后台主页 路由地址是 /home
                 window.sessionStorage.setItem('token', res.data.token)
                  this.$router.push('/home')
            })
    },
    // 重置
    resetLoginForm(){
        this.$refs.loginFormRef.resetFields();
    }

  },
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
.login_container{
    background: #2b4b6b;
    height:100%;
}
.login_box{
    width: 450px;
    height: 240px;
    background-color: rgba(255, 255, 255, 0.418);
    border-radius:5px;
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%,-50%);
}
.login_form{
    position: absolute;
    bottom: 0;
    width: 100%;
    padding: 0 20px;
     /* 元素指定宽度和高度包括了 padding 和 border  */
    box-sizing: border-box;
}
.btns{
    display: flex;
    justify-content: center;
}
.el-icon-user{
    display: flex;
}
</style>
